package demo01;

/*
*
按照频率将数组升序排序
给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同，请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
示例 1：
输入：nums = [1,1,2,2,2,3]
输出：[3,1,1,2,2,2]
解释：'3' 频率为 1，'1' 频率为 2，'2' 频率为 3 。

*
* */

import java.util.*;
import java.util.Map.Entry;

public class demo01 {

    public static void main(String[] args) {
        int[] nums = {-1,1,-6,4,5,-6,1,4,1};

        System.out.println(Arrays.toString(frequencySort(nums)));

    }

    public static int[] frequencySort(int[] nums) {

        HashMap<Integer,Integer> map = new HashMap<>();

        for (int i=0;i<nums.length;i++)
        {
            if (map.get(nums[i]) != null)
                map.put(nums[i],map.get(nums[i])+1);
            else
                map.put(nums[i],1);
        }

        int minv,mink,con=0;

        while (!map.isEmpty()){

            Set<Integer> keySet = map.keySet();
            Iterator<Integer> iterator = keySet.iterator();
            mink = iterator.next();
            minv = map.get(mink);

            while (iterator.hasNext()){

                int tk = iterator.next();
                int tv = map.get(tk);

//                System.out.println(minv + "," + tv);

                if (minv == tv)
                {
                    if (mink < tk)
                        mink = tk;
                }else if (minv > tv)
                {
                    mink = tk;
                    minv = tv;
                }


            }

            for (int i=0;i<map.get(mink);i++)
            {
                nums[con] = mink;
//                System.out.println(nums[con]);
                con++;
            }

            map.remove(mink);

        }

        return nums;
    }

}
